package com.mlink.ai.chat.ui.view

import android.annotation.SuppressLint
import android.content.Context
import android.util.AttributeSet
import android.view.MotionEvent
import android.widget.EditText

/**
 * 用于解决嵌套Scrollview的时候由于多行而产生的滑动冲突问题
 */
class EditTextWithScrollView : EditText {
    var oldY = 0f

    constructor(context: Context?) : super(context)
    constructor(context: Context?, attrs: AttributeSet?) : super(context, attrs)
    constructor(context: Context?, attrs: AttributeSet?, defStyleAttr: Int) : super(
        context,
        attrs,
        defStyleAttr
    )

    @SuppressLint("ClickableViewAccessibility")
    override fun onTouchEvent(event: MotionEvent): Boolean {
        when (event.action) {
            MotionEvent.ACTION_DOWN -> oldY = event.y
            MotionEvent.ACTION_MOVE ->                 // 当EditText可以上下滑动时，拦截上层布局事件
                if (canScrollVertically(1) && canScrollVertically(-1)) {
                    parent.requestDisallowInterceptTouchEvent(true)
                } else {
                    val currentY = event.y
                    // 向下滑动
                    if (currentY - oldY < 0) {
                        // 如果EditText能向下滑动
                        if (canScrollVertically(1)) {
                            parent.requestDisallowInterceptTouchEvent(true)
                        } else {
                            parent.requestDisallowInterceptTouchEvent(false)
                        }
                    }
                    // 向上滑动
                    if (currentY - oldY > 0) {
                        // 如果EditText能向上滑动
                        if (canScrollVertically(-1)) {
                            parent.requestDisallowInterceptTouchEvent(true)
                        } else {
                            parent.requestDisallowInterceptTouchEvent(false)
                        }
                    }
                }

            MotionEvent.ACTION_UP -> {
                oldY = 0f
                parent.requestDisallowInterceptTouchEvent(false)
            }
        }
        return super.onTouchEvent(event)
    }
}